package interprete;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.EOFException;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;


public class AnalizadorLexico {
	
	public enum TipoOp {inicio, stop, apila_dir, apila_float, apila_integer, apila_natural,
				apila_character, apila_boolean, desapila_dir, desapila_dir_float, desapila_dir_integer,
				desapila_dir_natural, desapila_dir_character, desapila_dir_boolean, menor_estricto,
				mayor_estricto, menor_igual, mayor_igual, igual, distinto,
				suma, resta, multiplica, divide, modulo, desplazar_izquierda,
				desplazar_derecha, cambio_signo, and, or, not, conversion_float,
				conversion_integer, conversion_natural, conversion_caracter, lectura, escritura,
				swap1, swap2, error, eof}
	
    private String archivo;
    private DataInputStream file;
    private boolean eof;
    
    public AnalizadorLexico(String archivo){
    	this.archivo = archivo;
    	this.file = null;
    	this.eof = false;
    }
    
    public void init() throws FileNotFoundException{
    	file = new DataInputStream(new FileInputStream(this.archivo));
    }
    
    public void stop() throws IOException{
		file.close();
    }
    
    public TipoOp dameInstruccion() throws IOException{
    	int valorLeido = -1;
    	if (!eof){
        	try{
	            valorLeido = file.readUnsignedByte();
	            System.out.println(valorLeido);
        	} catch (EOFException e) {
                eof = true;           
            }
        } 
    	return procesa(valorLeido);
    }

	private TipoOp procesa(int valorLeido) {
		switch (valorLeido) {
		case -1:
			return TipoOp.error;
		case 0:
			return TipoOp.inicio;
		default:
			return TipoOp.suma;
		}
	}
	
	

}
